package com.carbon.core.lang;

import org.apache.commons.lang3.StringUtils;

import java.util.regex.Pattern;

import static java.util.regex.Pattern.compile;

/**
 * 断言相关
 *
 * @author czq
 * @date 2021-02-24
 */
public class Assert {

    /**
     * 检查对象是否为空
     *
     * @param obj 对象
     * @param <T> 泛型
     * @return 对象
     * @throws IllegalArgumentException 非法参数异常
     */
    public static <T> T isNotNull(T obj) throws IllegalArgumentException {
        return isNotNull(obj, "此项未通过检查");
    }


    /**
     * 检查对象是否问空
     *
     * @param obj       对象
     * @param msgFormat 消息模板
     * @param args      参数
     * @param <T>       泛型
     * @return 检查后的对象
     * @throws IllegalArgumentException 非法参数异常
     */
    public static <T> T isNotNull(T obj, String msgFormat, Object... args) throws IllegalArgumentException {
        if (null == obj) {
            throw new IllegalArgumentException(String.format(msgFormat, args));
        }
        return obj;
    }

    /**
     * 检查字符串是否是 数字 组成的字符串
     *
     * @param value 字符串
     * @return 检查后的对象
     * @throws IllegalArgumentException 非法参数异常
     */
    public static String isNumber(String value) throws IllegalArgumentException {
        return isNumber(value, "该字符串非数字");
    }

    /**
     * 检查字符串是否是 数字 组成的字符串
     *
     * @param value     字符串
     * @param msgFormat 消息模板
     * @param args      参数
     * @return 检查后的对象
     * @throws IllegalArgumentException 非法参数异常
     */
    public static String isNumber(String value, String msgFormat, Object... args) throws IllegalArgumentException {
        Pattern pattern = compile("^[0-9]*$");
        if (StringUtils.isNotBlank(value) && pattern.matcher(value).matches()) {
            return value;
        }
        throw new IllegalArgumentException(String.format(msgFormat, args));
    }

}
